//============================================================================================
/**
 * @file	scr_shop.c
 * @brief	スクリプトコマンド：ショップ関連
 * @author	Satoshi Nohara
 * @date	06.06.23
 */
//============================================================================================
#include "common.h"
#include "system/lib_pack.h"
#include "system/pm_rtc.h"
#include "fieldsys.h"
#include "savedata/pkthln_svdata.h"

#include "script.h"
#include "scrcmd_def.h"
#include "field/eventflag.h"
#include "field/evwkdef.h"
#include "sysflag.h"
#include "syswork.h"

#include "fd_shop.h"
#include "itemtool/itemsym.h"

#include "../fielddata/shopdata/fs_item_def.h"
#include "../fielddata/shopdata/fs_goods_def.h"

#include "scr_shop.h"

//============================================================================================
//
//	構造体
//
//============================================================================================
//ショップアイテムデータ型
typedef struct{
	u16 itemno;		//アイテムナンバー
	u16 level;		//段階
}SHOP_ITEM_DATA;




//============================================================================================
//
//	データ
//
//============================================================================================
#include "..\fielddata\shopdata\shop_item.dat"
#include "..\fielddata\shopdata\fs_item.dat"
#include "..\fielddata\base_goods\goods_id_def.h"
#include "..\fielddata\shopdata\fs_goods.dat"
#include "seal\seal_id.h"
#include "..\fielddata\shopdata\fs_seal.dat"
#include "..\fielddata\shopdata\ps_shop.dat"

//============================================================================================
//
//	コマンド
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 変動フレンドリショップ呼び出し（買う）
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"1"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdShopCall( VM_MACHINE * core )
{
	u16 list[64];
	u8 level,badge,count,i;
	u16 id	= VMGetWorkValue(core);

	//初期化
	count = 0;
	badge = 0;
	level = 0;

	//バッジ数取得
	for( i=0; i < BADGE_MAX ;i++ ){
		if( MyStatus_GetBadgeFlag(SaveData_GetMyStatus(core->fsys->savedata), i) == TRUE ){
			badge++;
		}
	}

	//段階を取得
	switch( badge ){
	case 0:
		level = 1;
		break;
	case 1:	case 2:
		level = 2;
		break;
	case 3:	case 4:
		level = 3;
		break;
	case 5:	case 6:
		level = 4;
		break;
	case 7:
		level = 5;
		break;
	case 8:
		level = 6;
		break;
	default:
		level = 6;
		break;
	};

	for( i=0; i < SHOP_ITEM_DATA_MAX ;i++ ){
		if( level >= shop_item_data[i].level ){			//段階を比較
			list[count] = shop_item_data[i].itemno;		//データセット
			count++;
		}
	}
	list[count] = 0xffff;								//終了コードセット

	//イベントコールなので、スクリプトに復帰します。
	ShopInit( core->event_work, core->fsys, list, SHOP_TYPE_ITEM, 0, FALSE, NULL);
	return 1;
}

//--------------------------------------------------------------------------------------------
/**
 * フレンドリショップ呼び出し（売る）
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"1"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdShopSaleCall( VM_MACHINE * core )
{
	u16 list = 0xffff;	//終了コードセット

	//イベントコールなので、スクリプトに復帰します。
	ShopInit( core->event_work, core->fsys, &list, SHOP_TYPE_ITEM, 1, FALSE, NULL);
	return 1;
}

//--------------------------------------------------------------------------------------------
/**
 * 固定フレンドリショップ呼び出し
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"1"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdFixShopCall( VM_MACHINE * core )
{
	u16 id	= VMGetWorkValue(core);
	BOOL dp_flg;

#if 0	//DPのショップ定義を消すのでコメントアウト
	if( id == ID_SHOP_ITEM_C07_DEPT_01_01 || id == ID_SHOP_ITEM_C07_DEPT_01_02 ||
		id == ID_SHOP_ITEM_C07_DEPT_02_01 || id == ID_SHOP_ITEM_C07_DEPT_02_02 ||
		id == ID_SHOP_ITEM_C07_DEPT_03_01 || id == ID_SHOP_ITEM_C07_DEPT_03_02 ){
		dp_flg = TRUE;
	}else{
		dp_flg = FALSE;
	}
#else
	dp_flg = FALSE;
#endif
	//イベントコールなので、スクリプトに復帰します。
	ShopInit( core->event_work, core->fsys, (u16*)fs_item_data[id], SHOP_TYPE_ITEM, 0, dp_flg, NULL);
	return 1;
}

//--------------------------------------------------------------------------------------------
/**
 * 固定グッズショップ呼び出し
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"1"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdFixGoodsCall( VM_MACHINE * core )
{
	u16 id	= VMGetWorkValue(core);
	BOOL dp_flg;

	if( id == ID_SHOP_GOODS_C07_DEPT_04_01 || id == ID_SHOP_GOODS_C07_DEPT_04_02 ){
		dp_flg = TRUE;
	}else{
		dp_flg = FALSE;
	}

	//イベントコールなので、スクリプトに復帰します。
	ShopInit( core->event_work, core->fsys, (u16*)fs_goods_data[id], SHOP_TYPE_GOODS, 0, dp_flg, NULL);
	return 1;
}

//--------------------------------------------------------------------------------------------
/**
 * 固定シールショップ呼び出し
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"1"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdFixSealCall( VM_MACHINE * core )
{
	u16 id	= VMGetWorkValue(core);

	//イベントコールなので、スクリプトに復帰します。
	ShopInit( core->event_work, core->fsys, (u16*)fs_seal_data[id], SHOP_TYPE_SEAL, 0, FALSE, NULL);
	return 1;
}

#define POKETHLON_DENDOU_SHOP	( 7 )
//--------------------------------------------------------------------------------------------
/**
 * ポケスロンショップ呼び出し
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"1"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdPokethlonShopCall( VM_MACHINE * core )
{
	RTCDate date;
	EVENTWORK *ev;

	ev = SaveData_GetEventWork(core->fsys->savedata);


	// 日付情報の取得
	GF_RTC_GetDate(&date);

	// ショップ呼び出し（曜日によって品そろえが変わります・フルオープンフラグもあり）
	//イベントコールなので、スクリプトに復帰します。
	if( ZukanWork_GetZenkokuZukanFlag(SaveData_GetZukanWork(core->fsys->savedata))){
		// 全国図鑑
		ShopInit( core->event_work, core->fsys, (u16*)fs_goods_data[date.week],
					SHOP_TYPE_POKETHLON, 0, FALSE, ps_item_data[date.week+POKETHLON_DENDOU_SHOP]);
	}else{
		// ジョウト図鑑
		ShopInit( core->event_work, core->fsys, (u16*)fs_goods_data[date.week],
					SHOP_TYPE_POKETHLON, 0, FALSE, ps_item_data[date.week]);
	}
	return 1;
}


//--------------------------------------------------------------------------------------------
/**
 * ポケスロンカードショップ呼び出し
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"1"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdPokethlonCardShopCall( VM_MACHINE * core )
{
	PKTHLN_SV_DATA_PTR pkth_sv = PkthlnSv_GetSaveData(core->fsys->savedata);
	int i;
	for(i=0;i<PKTHLN_DATA_CARD_MAX;i++){
		if(PkthlnSv_GetRankingAppear(pkth_sv,i)==0){
			break;
		}
	}

	ShopInit( core->event_work, core->fsys, (u16*)fs_goods_data[0],
					SHOP_TYPE_POKETHLON_CARD, 0, FALSE, psd_item_data[i/POKETHLON_DATA_SHOP_MAX] );
	return 1;
}

//----------------------------------------------------------------------------------
/**
 * ポケスロンショップの在庫チェック
 *
 * @param   core
 *
 * @retval  BOOL		購入できる道具が有る場合は１、無い場合は０
 */
//----------------------------------------------------------------------------------
BOOL EvCmdPokethlonShopCheck( VM_MACHINE * core )
{
	EVENTWORK *ev;
	RTCDate date;
	const PS_SHOP_DATA *items;
	u16 * ans = VMGetWork( core );
	PKTHLN_SV_DATA_PTR pkth_sv = PkthlnSv_GetSaveData(core->fsys->savedata);

	int i,count=0, buyed=0;

	ev = SaveData_GetEventWork(core->fsys->savedata);

	// 日付情報の取得
	GF_RTC_GetDate(&date);

	// 全国図鑑か？
	if( ZukanWork_GetZenkokuZukanFlag(SaveData_GetZukanWork(core->fsys->savedata))){
		items = ps_item_data[date.week+POKETHLON_DENDOU_SHOP];
	}else{
		// ジョウト図鑑
		items = ps_item_data[date.week];
	}


	for(i=0;i<POKETHLON_SHOP_MONDAY_FULL_MAX;i++){
		// 取り扱い数を取得
		if(items[i].item!=0xffff){
			count++;
		}else{
			break;
		}
	}

	// 購入済みフラグを取得
	for(i=0;i<POKETHLON_SHOP_MONDAY_FULL_MAX;i++){
		if(PkthlnSv_GetShopFlag(pkth_sv, i)){
			buyed++;
		}
	}
	// 在庫は？
	if(count<=buyed){
		*ans = 0;	// もう無理
	}else{
		*ans = 1;	// まだ買える
	}

	return 0;
}
//----------------------------------------------------------------------------------
/**
 * ポケスロンレコードショップの在庫チェック
 *
 * @param   core
 *
 * @retval  BOOL		購入したレコードカードの数を返す（０−２７）
 */
//----------------------------------------------------------------------------------
BOOL EvCmdPokethlonCardShopCheck( VM_MACHINE * core )
{
	int i;
	u16 * ans = VMGetWork( core );
	PKTHLN_SV_DATA_PTR pkth_sv = PkthlnSv_GetSaveData(core->fsys->savedata);

	for(i=0;i<PKTHLN_DATA_CARD_MAX;i++){
		if(PkthlnSv_GetRankingAppear(pkth_sv,i)==0){
			break;
		}
	}

	*ans = i;

	return 0;

}